iOS面试题 一共分为​​笔试题​​和​​面试题​​两部分

​笔试题​​ 一共分为10个 总共613题

​面试题​​ 一共400题

笔试题 一个10个系列 分别为

​①(语法篇) 共147题 已更新​

​②(常识篇) 共72题 已更新​

​③(界面篇) 共83题 已更新​

​④(iOS篇) 共52题 已更新​

​⑤(操作篇) 共68题 已更新​

​⑥(数据结构篇) 共23题 已更新​

​⑦(多线程篇) 共60题 已更新​

​⑧(网络篇) 共22题 已更新​

​⑨(多媒体篇) 共59题 已更新​

​⑩(安全篇) 共27题 已更新​

​面试题​​ 一共分为3个 总共400题

​⑪(面试篇 1/3) 共127题 已更新​

​⑪(面试篇 2/3) 共137题 已更新​

​⑪(面试篇 3/3) 共136题 已更新​

①(语法篇)、《史上最全iOS八股文面试题》2022年,金三银四我为你准备了,iOS《1000条》笔试题以及面试题(包含答案)。带面试你过关斩将,(赶紧过来背iOS八股文)_swift

@​​TOC​

笔试题 613题

⭐️①、笔试题-语法篇(147题)

1.与alloc相对应的方法是:[单选题]

  • [ ] A、alloc
  • [x] B、dealloc
  • [ ] C、release
  • [ ] D、autorelease

2.与retain相对应的方法是:[单选题]

  • [ ] A、alloc
  • [ ] B、dealloc
  • [x] C、release/autorelease
  • [ ] D、copy

3.@property的作用是申明属性及其特性?:[单选题]

  • [x] A、正确
  • [ ] B、错误

4.@synthesize的作用是自动生成属性的访问器(getter/setter)方法?:[单选题]

  • [x] A、正确
  • [ ] B、错误

5.一个对象的dealloc方法在什么时候被调用:[单选题]

  • [ ] A、引用计数(retuanCount)降为-1
  • [ ] B、引用计数(retuanCount)降为1
  • [ ] C、引用计数(retuanCount)降为2
  • [x] D、引用计数(retuanCount)降为0

6.分类(categoryes)能够向一个已有的类中添加:[单选题]

  • [x] A、方法
  • [ ] B、属性
  • [ ] C、动作
  • [ ] D、协议

7.扩展(extensions)能够在当前类中增加[多选题]

  • [ ] A、动作
  • [x] B、方法
  • [x] C、属性
  • [ ] D、协议

8.协议(protocol)可以分为两种,其中以哪种关键字声明的协议可以不被实现:[单选题]

  • [x] A、@optional
  • [ ] B、@required
  • [ ] C、@none
  • [ ] D、@userful

9.那个类是大多数Objective-C类继承的根类,它没有父类[单选题]

  • [ ] A、NSNull
  • [ ] B、NSInterger
  • [ ] C、NSString
  • [x] D、NSObject

10.代理(delegate)的作用是让一个对象实现另一个对象的方法?[判断题]

  • [x] A、正确
  • [ ] B、错误

11.​​autorelease​​的作用是:[多选题]

  • [x] A、将对象放入自动释放池
  • [x] B、将对象的引用计数减1
  • [x] C、延后调用release方法
  • [ ] D、立即调用release方法

12.​​-(void)setName:(Nsstring)NewName{ self.name = NewName}​​:被调用的结果是:[单选题]

  • [ ] A、设置name属性的值
  • [x] B、程序死循环
  • [ ] C、获取name属性的值
  • [ ] D、复制name属性的值

13.在​​KVC​​中通用的属性访问器方法是那两个:[多选题]

  • [x] A、valueForKey:
  • [x] B、setValue:forKey:
  • [ ] C、getValueForKey:
  • [ ] D、SetValue:

14.关键字​​nil​​在Objective-C中表示:[单选题]

  • [x] A、一个空对象
  • [ ] B、一个空指针
  • [ ] C、一个空字符
  • [ ] D、一个空字节

15.​​#import​​和​​#include​​的区别是: ​​#import​​可以避免文件被多次引用?:[判断题]

  • [x] A、正确
  • [ ] B、错误

16.在Objective-C是否支持运算符重载:[判断题]

  • [ ] A、正确
  • [x] B、错误

17.在Objective-C中能否在头文件申明私有方法:[判断题]

  • [ ] A、可以
  • [x] B、不可以

Objective-C关键字说明

Objective-C关键字说明

@private ​​作用范围只能在自身类​

@protected ​​作用范围在自身类和继承自己的子类,什么都不写,默认是此属性。​

@public ​​作用范围最大,在任何地方​

@package ​​不会被导出到外部, 所以任何试图在这个framework外面访问这些成员变量的类都会得到一个链接错误的结果.​

18.在Objective-C中,类的成员变量默认被申明为:[单选题]

  • [ ] A、@private ​​作用范围只能在自身类​
  • [x] B、@protected ​​作用范围在自身类和继承自己的子类,什么都不写,默认是此属性。​
  • [ ] C、@public ​​作用范围最大,在任何地方​
  • [ ] D、@package ​​不会被导出到外部, 所以任何试图在这个framework外面访问这些成员变量的类都会得到一个链接错误的结果.​

19.关于Objective-C++中的异常处理,下面说法最正确的是:[单选题]

  • [ ] A、Objective-C不支持异常处理
  • [ ] B、在Objective-C++中,Objective-C的异常处理能够捕获C++的异常
  • [x] C、在Objective-C++中,Objective-C的异常不能捕获到C++的异常
  • [ ] D、在Objective-C++中,Objective-C和C++的异常处理可以相互捕获异常

20.在对象的​​dealloc​​方法中,关于​​[super dealloc]​​:语法说法正确的是:[单选题]

  • [ ] A、[super dealloc];有没有都可以
  • [ ] B、[super dealloc];应该放在dealloc方法内的第一行
  • [x] C、[super dealloc];应该放在dealloc方法内的最后一行
  • [ ] D、[super dealloc];位置无所谓,只要在dealloc方法里有就可以

21.下面关于方法:​​[[[object method1]method2] method3:[object method4]];​​中的method调用的顺序是:[单选题]

  • [ ] A、1 2 3 4
  • [x] B、1 2 4 3
  • [ ] C、4 1 2 3
  • [ ] D、4 3 2 1

22.ARC​​(Automatic Reference Counting)​​模式下,下面那个方法是未被禁用的:[单选题]

  • [ ] A、retain
  • [x] B、copy
  • [ ] C、release
  • [ ] D、autorelease

23.下列对象中不能调用​​initWithContentsOfFile​​方法进行构造的是:[单选题]

  • [ ] A、NSString
  • [x] B、NSXMLParser
  • [ ] C、NSDicttionary
  • [ ] D、NSData

24.下面哪些关键字会引用对象的引用计数​​(retainCount)​​加一:[多选题]

  • [x] A、alloc
  • [ ] B、init
  • [x] C、retain
  • [x] D、copy

25.在以.mm为扩展名的文件里,可以包含的代码有哪些:[多选题]

  • [x] A、C
  • [x] B、Objective-C
  • [x] C、C++
  • [ ] D、Swift

26.下面哪些类中使用到了单例​​(Singletion)​​模式:[多选题]

  • [x] A、FileManager
  • [x] B、NotificationCenter
  • [x] C、Application
  • [x] D、Device

27.下面个数据类型中,能够直接放进​​NSArray​​数组的有:[多选题]

  • [ ] A、BOOL
  • [x] B、NSInteger
  • [x] C、NSString
  • [x] D、NSArray

28.Objective-C的快速​​枚举​​对比​​循环​​访问的优点,下面说法正确的是:[多选题]

  • [x] A、使用快速枚举效率更高
  • [x] B、语法更简洁
  • [x] C、使用更安全
  • [ ] D、职场更多的数据类型

29.OC包含一个​​自定义的头文件​​应该使用:[单选题]

  • [ ] A、#include
  • [ ] B、#include<>
  • [x] C、#import“”
  • [ ] D、#import<>

30.必须​​实现的协议​​方法使用那个关键字声明:[单选题]

  • [ ] A、@property
  • [ ] B、@interface
  • [x] C、@required
  • [ ] D、@protocol

31.声明一个方法:提供Student对象数组按照学号​​升序排序​​的判断条件:[单选题]

  • [x] A、- (NScomparisonResult)compareWithNumberForAscendSort:(Student)otherStudent
  • [ ] B、- (NSinteger)compareWithNumberForAscendSort:(Student)otherStudent
  • [ ] C、- (BOOL)compareWithNumberForAscendSort:(Student)otherStudent
  • [ ] D、- (int)compareWithNumberForAscendSort:(Student)otherStudent

32.OC语法中类的实例变量如果​​只可以被本类和其子类访问​​,需要下列那个修饰符:[单选题]

  • [ ] A、@public
  • [ ] B、@private
  • [x] C、@protected
  • [ ] D、@friendly

33.关于集合描述不正确的是:[单选题]

  • [x] A、所有的集合都可以添加元素。
  • [ ] B、集合分为可变集合、不可变集合。
  • [ ] C、数组,字典额NSSet这三种集合存储数据的方式不同。
  • [ ] D、所有集合都能保存id类型数据。

34.​​NSDictionary *dict = [NSDictionary dictionaryWithObject:@"a value" forKey:@"aKey"];​​ NSLog(@"%@",[dict objectForKey:@"aKey"]);输出什么 :[单选题]

  • [ ] A、a value
  • [ ] B、akey: a value
  • [x] C、崩溃信息
  • [ ] D、a vlaue : akey

35.向OC控制台输出一个字符串应该用 :[单选题]

  • [x] A、NSLog()
  • [ ] B、Printf()
  • [ ] C、NSPrintf()
  • [ ] D、scanf()

36.名为print::的方法有几个传入参数 :[单选题]

  • [ ] A、0
  • [ ] B、1
  • [x] C、2
  • [ ] D、3

37.下列那个选项与​​@synthesize​​配合使用 :[单选题]

  • [ ] A、@end
  • [ ] B、@interface
  • [ ] C、@implementation
  • [x] D、@property

38.在Objective-C中,所有类的根类是 :[单选题]

  • [x] A、NSObject
  • [ ] B、NSNull
  • [ ] C、NSCoding
  • [ ] D、UIView

39.能准成删除"张三"的代码是 ​​NSMutableDictionary *people = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"张三",@"左护法", nil];​​ :[单选题]

  • [x] A、[people removeObjectForKey:@"左护法"];
  • [ ] B、[people removeObject:@"张三"];
  • [ ] C、[people removeObjectAtIndex:0];
  • [ ] D、[people removeAllObjects];

40.使用OC语言实处"This is Objective-C program."正确的是 :[单选题]

  • [ ] A、NSLog(@“%s”,This is Objective-C program.);
  • [x] B、NSLog(@“%@”,This is Objective-C program.);
  • [ ] C、NSLog(@“This is Objective-C program.",%@);
  • [ ] D、D.NSLog(@“This is Objective-C program.",%@);

41.​​协议与委托​​的描述不正确的是 :[单选题]

  • [ ] A、委托是iOS的一种设计模式
  • [ ] B、协议里的方法默认是必须实现的
  • [x] C、类接受了多个协议,这些协议写在父类后面的<>内,多个协议之间用"."隔开
  • [ ] D、定义协议使用@protocol关键字

42.关于​​协议​​描述不正确的是 :[单选题]

  • [ ] A、协议分正式和非正式协议。
  • [ ] B、在要求确认协议的类必须实现协议中的方法时,可以使用@required。
  • [ ] C、一个协议可以被多个类确认。
  • [x] D、协议中声明的方法,默认是@optional的。

43.下面关于​​类​​概念的描述中,错误的是 :[单选题]

  • [ ] A、类是抽象数据类型的实现
  • [ ] B、类是具有共同行为若干对下的统一描述提
  • [ ] C、类是创建对象的模板
  • [x] D、类就是C语言中的结构体类型

44.在Objective-C中,下面哪些选项是​​属性的正确声明方式​​ :[单选题]

  • [ ] A、@property(nonatomic,retain) NSString *myString;
  • [ ] B、@property(nonatomic,assign) NSString *myString;
  • [x] C、@property(nonatomic,assign) Int myNumber;
  • [ ] D、@property(nonatomic,retain) Int myNumber;

45.​​NSString *name= [[NSString alloc]initWithString:@"张三"]; NSLog(@"%d",[name retainCount]);​​ 以上代码输出的内容是多少:[单选题]

  • [x] A、-1
  • [ ] B、0
  • [ ] C、1
  • [ ] D、2

46.不会立刻使引用计数器改变的是:[单选题]

  • [ ] A、release
  • [ ] B、alloc
  • [x] C、autorelease
  • [ ] D、retain

47.OC中的​​委托​​最好声明成:[单选题]

  • [ ] A、retain
  • [x] B、assign
  • [ ] C、copy
  • [ ] D、readonly

48.经过下列哪种操作后需要使用release:[单选题]

  • [ ] A、delegate
  • [ ] B、assign
  • [x] C、retain
  • [ ] D、dealloc

49.在OC中​​类​​的接口​​声明​​关键字为:[单选题]

  • [ ] A、@import
  • [x] B、@interface
  • [ ] C、@implemention
  • [ ] D、@protocol

50.-(id)setName:(NSString *)name :(NSString *)sex Age:(Int)age的方法名是:[单选题]

  • [ ] A、-(id)setName:(NSString *)name :(NSString *)setAge:(Int)age
  • [x] B、setName:name :sex age:age
  • [ ] C、setName::age:
  • [ ] D、setName:name:age:

51.将@"2C青年"替换成@"有为青年"的代码是:[单选题]

  • [ ] A、[@"2C青年" stringByAppendingOfString:@"2B" withString:@"有为"];
  • [x] B、NSRange range = {0,2}; [@"2C青年" stringByReplacingCharacterInRange:rangWithString:@"有为"];
  • [ ] C、NSRange range = {1,2}; [@"2C青年" stringByReplacingCharacterInRange:rangWithString:@"有为"];
  • [ ] D、[@"2C青年" stringByReplacingOccurrencesOfString:@"有为" withString:@"2C"];

52.下列回调机制的理解不正确的是:[单选题]

  • [ ] A、目标动作对:当两个对象之间有比较紧密的关系时,如视图控制器与其下的某个视图。
  • [x] B、代理:也叫委托,当某个对象收到多个事件,并要求同一个对象来处理所有事件时。委托机制必须依赖某个协议定义的方法来发送消息
  • [ ] C、通知机制:当需要多个对象或两个无关对象处理同一个事件时。
  • [ ] D、Block: 适用于回调只发送一次的简单任务。

53.在Xcode中,需要编译混合Objective-C和C++的源码文件,需要将文件格式的后缀改为:[单选题]

  • [ ] A、.c
  • [ ] B、.cpp
  • [x] C、.mm
  • [ ] D、.m

54.Objective-C​​声明一个类​​所要用到的编译指令是:[单选题]

  • [x] A、@interface SonmeClass
  • [ ] B、@protocol SonmeClass
  • [ ] C、@implementation SonmeClass
  • [ ] D、@autorelease SonmeClass

55.下面那个方法不属于NSObject的内省(Introspection)方法:[单选题]

  • [x] A、init
  • [ ] B、isKindOfClass
  • [ ] C、responseToSelector
  • [ ] D、isKindOfClass

56.使用​​protocol​​时,声明一组​​可选择​​实现与否的函数,需要在声明的前一行加上:[单选题]

  • [ ] A、@required
  • [x] B、@optional
  • [ ] C、@interface
  • [ ] D、@protocol

57.下面关于​​#import​​和​​#include​​的描述正确的是:[单选题]

  • [x] A、#import是#include的替代指令,防止重复引用
  • [ ] B、#import和#include不可以混合使用
  • [ ] C、#import只用于引用Objective-C的文件,#include 只用于引用C和C++的文件
  • [ ] D、#import和#include的使用效果完全相同

58.下面那个方法可以比较两个NSString *str1, *str2的​​异同​​:[单选题]

  • [ ] A、if (str1 str2) xxx;
  • [x] B、if ([str1 isEqualToString str2]) xxx;
  • [ ] C、if (str1 && str2) xxx;
  • [ ] D、if ([str1 length] [str2 length]) xxx;

59.Objective-C有​​私有方法​​吗?有​​私有变量​​吗?:[单选题]

  • [ ] A、有私有方法和私有变量
  • [ ] B、没有私有方法和私有变量
  • [x] C、没有私有方法,有私有变量
  • [ ] D、有私有方法,没有私有变量

60.一个类的​​delegate(代理)​​的作用不正确的是:[单选题]

  • [ ] A、delegate中的函数在其他类中实现
  • [ ] B、主要用于不同类型的对象之间一对一传递消息
  • [ ] C、没有指派则不会触发
  • [x] D、可以一个对象的delegate指派给多个其他类型的对象

61.下面说法不正确的是:[单选题]

  • [ ] A、readwrite 是可读可写特性;需要生成getter方法和setter方法时;
  • [ ] B、readonly 是只读特性;只会生成getter方法。不会生成setter方法,不希望属性在类外改变
  • [x] C、assign 是赋值特性,和weak一样,可用weak代替。
  • [ ] D、retain 表示 持有特性;setter方法将传入参数先保留,在赋值。传入参数的retaincount 会 + 1;

62.对于语句​​NSString *obj = [[NSData alloc]init];​​obj在​​编译时​​和​​运行时​​,分别是什么类型的对象:[单选题]

  • [x] A、编译时时NSString的类型;运行时是NSData类型的对象
  • [ ] B、编译时时NSObject的类型;运行时是NSData类型的对象
  • [ ] C、编译时时NSData的类型;运行时是NSString类型的对象
  • [ ] D、编译时时NSObject的类型;运行时是NSString类型的对象

63.以下关于​​类别​​的作用,说法不正确的是:[单选题]

  • [ ] A、将类的实现分散到多个不同文件或多个不同框架中。
  • [ ] B、创建对私有方法的前向引用。
  • [ ] C、向对象添加非正式协议。继承可以增加,修改或者删除方法。
  • [x] D、不能添加属性。

64.​​Block​​不允许修改​​外部变量的值​​:[判断题]

  • [x] A、正确
  • [ ] B、错误

65.下面关于Objective-C中的​​block​​定义正确的是:[单选题]

  • [x] A、typedef void(SuccessBlock) (BOOL success);
  • [ ] B、typedef void(SuccessBlock) (NSStringvalue,BOOL success);
  • [ ] C、typedef void(SuccessBlock) (NSStringvalue,BOOL success);
  • [ ] D、typedef void(SuccessBlock) (NSString *value);

66.下列关于iOS开发中​​类方法​​的使用描述,错误的是:[单选题]

  • [ ] A、类方法可以调用类方法
  • [ ] B、类方法不可以调用实例方法。但是类方法可以通过创建对象访问实例方法
  • [x] C、类方法不可以使用实例变量,包括sef(可以使用self)
  • [ ] D、类方法作为消息,可以被发送到类或者对象里面去

67.以下那一段代码不会抛出异常:[多选题]

  • [ ] A、NSArray *array = @[1,2,3; NSNumber *number = array[3]; // @[@“1”,@“2”,@“3”]
  • [ ] B、NSDictionary *dict = @{@"key":nil} // value不能为空
  • [x] C、NSString str = nil; NSString *str = [str substringFromIndex:3];
  • [x] D、NSString *str = "hi"; NSString *str = [str substringFromIndex:3];

68.关于Swift语言中的​​常量​​和​​变量​​,以下说法正确的是:[多选题]

  • [x] A、常量所只想的是一个特定类型的值。如数组8或者字符"Swift"
  • [x] B、你可以使用 lei 关键字定义一个常量,使用关键字var 定义一个变量
  • [ ] C、常量和变量在使用前不需要定义(声明)。
  • [x] D、变量的值可以根据需要不断进行修改,二常量的值一经定义,是不能够被修改的。

69.Swift4.0支持哪些输出函数?:[多选题]

  • [x] A、print
  • [ ] B、printIn
  • [x] C、debugPrint
  • [x] D、dump

70.关于Swift​​注释​​,以下说法正确的是:[多选题]

  • [x] A、序言注释的内容主要包含模块的接口、数据的描述和模块的功能;
  • [x] B、功能性注释主要包含程序段的功能、语句的功能和数据的状态。
  • [x] C、单行注释使用//表示
  • [x] D、多行注释使用/\*...\*/来表示

71.Swift​​布尔类型的值​​只能是true或者false?:[判断题]

  • [x] A、正确
  • [ ] B、错误

72.Swift语言可以像C语言那样,用 非0表示true,用0表示false?:[判断题]

  • [ ] A、正确
  • [x] B、错误

73.Swift语言可以像Objective-C那样,使用YES表示true,使用NO表示false?:[判断题]

  • [ ] A、正确
  • [x] B、错误

74.关于Swift语言的Double和Float类型,以下说法正确的是:[多选题]

  • [x] A、浮点数值是具有小数部分的浮点数,比如3.1415 和 -0.228。
  • [x] B、相对比证书来说,浮点数类型表示更广的数值范围,储存更大或者更小的数字。
  • [x] C、Double 表示64位浮点数,在浮点数需要更大或者特别精准的时候,可使用此类型。
  • [x] D、Float表示32位浮点数。在不需要64位精度的时候可使用此类型。

75.关于Swift字符串中的​​转义符​​,以下描述正确的是:[多选题]

  • [x] A、\\表示反斜杠
  • [x] B、\n表示换行符
  • [x] C、\r表示回车符
  • [x] D、\t 表示制表符

76.以下对Swift中的​​Switch​​条件判断语句描述正确的是:[多选题]

  • [x] A、Switch语句会尝试把某个值与若干个条件进行匹配。
  • [x] B、Switch语句都由多个case构成,每一个case 都是代码执行的一条分支。
  • [ ] C、和Objective-C相同的是。在Swift中。你需要为case分支添加break语句。
  • [x] D、当条件判断的情况比较多时,通常用Switch语句替换if语句。

77.Swift的​​continue​​语句,用来告诉用户一次循环体停止本次的循环,并立即进入下次的循环:[判断题]

  • [x] A、正确
  • [ ] B、错误

78.以下那个语句,可以运行Swift代码在执行完一个​​case​​分支后,​​跳到下一个case​​分支中。:[单选题]

  • [ ] A、continue
  • [ ] B、break
  • [x] C、fallthrough
  • [ ] D、goto

79.以下关于Swift语言中的​​数组​​,描述错误的是:[单选题]

  • [ ] A、组成数组的各个变量称为数组的分量,也称为数组的元素,有时也被称为下标变量。
  • [x] B、在Swift中,数据值在被存储进入某个数组之前,数据地类型不需要明确。
  • [ ] C、数组中元素的访问,是通过下标语法实现的。
  • [ ] D、在Swift中,可以使用数组的append()方法,或者直接使用加号+,往已有的数组中添加新的元素.

80.以下关于Swift语言中的​​字典​​,描述正确的是:[多选题]

  • [x] A、字典是一个能够使用类似键的唯一标识符,来获取值得非序列化集合。
  • [x] B、和数组不同的是,字典中的元素并没有具体的顺序。也就是说字典是无序存放元素的。
  • [x] C、字典可以存储的键和值。必须提前定义它们的类型。
  • [ ] D、字典可以存储的键和值。无须提前定义它们的类型。

81.对Swift中的​​函数​​描述正确的语句是:[多选题]

  • [ ] A、Swift使用function进行函数的定义。
  • [x] B、函数是一个组织在一起的程序代码金河。用来完成某个特定功能。
  • [x] C、通过函数名以及对应类型的参数值。可调用这个函数。
  • [ ] D、调用函数时传递的参数的顺序。无需与参数列表中的顺序相同

82.在Swift环境中,无法为​​函数​​的参数设置默认值:[判断题]

  • [ ] A、正确
  • [x] B、错误

83.关于Swift语言的​​函数​​,以下说法正确的是:[多选题]

  • [x] A、如果你不确定参数的数量,可通过变量类型后面添加...,定义可变参数。
  • [ ] B、如果你不确定参数的数量,可通过变量类型后面添加___,定义可变参数。
  • [x] C、一个函数最多能有一个可变参数,且必须是函数表中最后的一个。
  • [ ] D、一个函数可以有多个可变参数,可变参数可以放在参数列表中的任意位置。

84.Swift语言支持将​​函数​​作为​​另一个函数的返回值​​:[判断题]

  • [x] A、正确
  • [ ] B、错误

85.Swift语言支持将​​函数​​作为​​另一个函数的参数​​?:[判断题]

  • [x] A、正确
  • [ ] B、错误

86.Swift语言中的​​函数​​无法同时​​返回多个值​​:[判断题]

  • [ ] A、正确
  • [x] B、错误

87.关于Swift语言的​​内置函数​​,以下描述正确的是:[多选题]

  • [x] A、abs绝对值函数,用来返回指定参数的正值。当参数为负数时。返回对应的正数。当参数为正数时。结果将保存不变。
  • [x] B、min最小值函数。用来返回不定数量的参数之间的最小值。
  • [x] C、max最小值函数。用来返回不定数量的参数之间的最大值。
  • [x] D、map函数通常用于将数组中的每一个元素,通过指定的方法进行转换。

88.以下关于Swift语言的​​枚举​​类型,描述错误的是:[单选题]

  • [ ] A、所谓枚举是指将变量的值一一列举出来,并只限于在列举出来的值得范围内进行取值。
  • [ ] B、Swift语言不须给枚举中的每一个成员都提供值。
  • [x] C、字符、整数和浮点类型。可以作为枚举成员的数据类型。字符串则无法作为枚举成员的数据类型
  • [ ] D、和Objective-C语言中的枚举不同,你可以为Swift的枚举添加方法。

89.以下关于Swift语言的​​结构体​​类型,描述错误的是:[单选题]

  • [ ] A、可以为结构体定义常量或变量的属性
  • [ ] B、和Objective-C语言中的结构体不同,你可以为Swift的结构体添加方法。
  • [ ] C、可以给结构体定义下标。
  • [x] D、使用structure关键字来进行定义的。

90.以下关于Swift语言的​​类​​和​​结构体​​,描述正确的是:[多选题]

  • [x] A、两者都可以定义属性以存储值。
  • [x] B、两者都可以定义方法以提供功能。
  • [x] C、两者都可以定义下标脚本,用于允许使用下标语法访问值。
  • [x] D、两者都可以定义初始化器用于初始化状态。

91.以下关于Swift语言的​​类​​和​​结构体​​,描述正确的是:[多选题]

  • [x] A、两者都可以被扩展。以实现默认没有的功能。
  • [x] B、两者都可以遵循协议,以针对特定类型提供标准功能。
  • [ ] C、类可以继承另一个类,结构体也可以继承另一个结构体。
  • [x] D、类和结构体都尅添加析构方法。

92.在Swift环境中,可以为​​类​​、​​结构体​​和​​枚举​​等类型定义​​静态方法​​?:[判断题]

  • [x] A、正确
  • [ ] B、错误

93.在为​​结构体​​和​​枚举​​定义​​静态方法​​时,可以使用​​static​​关键字:[判断题]

  • [x] A、正确
  • [ ] B、错误

94.在为​​类​​定义​​静态方法​​时,可以使用​​class​​关键字?:[判断题]

  • [x] A、正确
  • [ ] B、错误

95.Swift和Objective-C一样是通过​​自动引用计数(ARC)技术​​,来实现对实例的内存管理的:[判断题]

  • [x] A、正确
  • [ ] B、错误

96.在Swift环境中,​​类​​的​​继承​​不同于​​结构体​​和​​枚举​​类型,​​继承​​是​​类​​所特有的?:[判断题]

  • [x] A、正确
  • [ ] B、错误

97.Swift的​​延迟加载​​属性是指当第一次被调用的时候,才会对其进行初始化操作的属性?:[判断题]

  • [x] A、正确
  • [ ] B、错误

98.在Swift环境中,元组、​​枚举​​和​​结构体​​属于​​引用类型​​,而​​类​​则属于​​值类型​​:[判断题]

  • [ ] A、正确
  • [x] B、错误

99.类型检查在Swift中,是使用​​is​​和​​as​​ ​​操作符​​来实现的?:[判断题]

  • [x] A、正确
  • [ ] B、错误

100.Swift语言中的​​AnyObject​​,可以代表人和class类型的实例?:[判断题]

  • [x] A、正确
  • [ ] B、错误

101.Swift语言中的​​Any​​可以表示人和类型,除了​​方法类型(function types)​​?:[判断题]

  • [x] A、正确
  • [ ] B、错误

102.Swift中的​​扩展功能(Extension)​​,可以在没有权限获取原始源代码的情况下,扩展某个类型的功能:[判断题]

  • [x] A、正确
  • [ ] B、错误

103.现有的​​类​​、​​结构体​​或​​枚举​​类型的方法。都可以在扩展的帮助下进行添加?:[判断题]

  • [x] A、正确
  • [ ] B、错误

104.在Swift语言中,类型的功能可以使用​​扩展​​加入,但重写的功能能不能使用扩展?:[判断题]

  • [x] A、正确
  • [ ] B、错误

105.在Swift语言中,使用​​扩展​​可以完成哪些任务?:[多选题]

  • [x] A、添加计算型属性和计算静态属性
  • [x] B、定义实例方法和类型方法。
  • [x] C、提供新的构造器。
  • [x] D、使一个已有类型符合某个接口。

106.​​类​​、​​结构体​​和​​枚举​​都可以遵循协议,并提供具体实现来完成​​协议​​定义的方法和功能:[判断题]

  • [ ] A、正确
  • [x] B、错误

107.以下关于Swift语言中的可选​​Optional​​类型,描述正确的是:[多选题]

  • [x] A、Optional类型是一个enum枚举类型,包含None和Some两个元素。
  • [ ] B、Optional类型是一个enum枚举类型,包含Blank和Some两个元素。
  • [x] C、在通过Some(T)包装wrap原始值之后,在使用Optional的时候。就要进行相应的拆包操作
  • [ ] D、在通过Some(T)包装wrap原始值之后,在使用Optional的时候。无需进行相应的拆包操作

108.Swift没有Objective-C中的​​#define​​、​​__OPTIMIZE__​​宏定义方法?:[判断题]

  • [x] A、正确
  • [ ] B、错误

109.在Swift中,我们可以给哪些类型定义​​subscript​​下标脚本的语法:[多选题]

  • [x] A、类
  • [ ] B、协议
  • [x] C、结构体
  • [x] D、枚举

110.以下关于Swift语言下标说法正确的是:[多选题]

  • [x] A、下标脚本使用subscript关键字来定义
  • [x] B、下标脚本使用 get、set来定义读、写属性,并不需要get和set都有,可以只读,并且读必须有。
  • [x] C、定义 set 属性时。传入的参数默认名称为 newValue。并且newValue的类型和subscript函数返回值相同。
  • [x] D、下标脚本允许你通过在实例后面的方括号中传入一个或多个的索引值对实例进行访问和赋值。

111.Objective-C中的头文件和实现文件,请问.h文件类似C++的.h文件, .m文件类似.cpp文件?:[判断题]

  • [x] A、正确
  • [ ] B、错误

112.Objective-C语言可以和C、C++混合编程吗?:[判断题]

  • [x] A、可以
  • [ ] B、不可以

113.Objective-C具有哪些动态特性:[多选题]

  • [x] A、动态类型
  • [ ] B、动态名称
  • [x] C、动态绑定
  • [x] D、动态加载

114.在Objective-C语言中,除了那几个方法之外创建的对象都是​​autorelease​​的?:[多选题]

  • [ ] A、init
  • [x] B、alloc
  • [x] C、new
  • [x] D、copy

115.在Objective-C只有​​单一继承​​,没有​​多重继承​​:[判断题]

  • [x] A、正确
  • [ ] B、错误

116.如果你用Swift 写的​​class​​ 是继承自​​NSObject​​,Swift会自动为所有非private的类和成员加上哪些标记?:[单选题]

  • [ ] A、@property
  • [ ] B、@objec-no
  • [x] C、@objc
  • [ ] D、Synchronized

117.Objective-C有哪些遍历(迭代)方式:[单选题]

  • [x] A、使用for循环
  • [x] B、使用NSEnumerator遍历
  • [x] C、使用for...in遍历
  • [x] D、基于Block的遍历方式

118.如果​​Category​​和原始类中的方法名称冲突,则​​Category​​将覆盖原始类的方法。因为​​Category​​具有更高的优先级?:[判断题]

  • [x] A、正确
  • [ ] B、错误

119.无法向​​Category​​中添加​​实例变量​​吗?:[判断题]

  • [x] A、正确
  • [ ] B、错误

120.Objective-C的​​Category​​可以实现哪些功能?:[多选题]

  • [x] A、将类的实现分散到多个不同文件或不同框架中。
  • [x] B、创建对私有方法的前向引用。
  • [ ] C、向对象添加正式协议。
  • [x] D、向对象添加非正式协议。

121.以下哪些情况会在Objective-C中产生异常:[多选题]

  • [x] A、NSDictionary 删除为 nil的key
  • [x] B、NSDictionary添加nil的对象
  • [x] C、.h文件里函数名,却忘了修改.m文件里对应的函数名
  • [x] D、使用第三方库时,没有添加"-ObjC" flag

122.以下哪些情况会在Objective-C中产生异常?:[多选题]

  • [x] A、NSDictionary 删除为 nil的key
  • [x] B、NSURL的初始化,传入nil的http地址
  • [x] C、数组最大下标处理错误
  • [x] D、如果一个数组刚初始化,还式空的,就对它进行相关操作

Mach异常信号说明

Mach异常信号说明。

SIGHUP[^1.SIGHUP]
SIGINT[^2.SIGINT]
SIGQUIT[^3.SIGQUIT]
SIGILL[^4.SIGILL]
SIGATRAP[^5.SIGATRAP]
SIGABRT[^6.SIGABRT]
SIGBUS[^7.SIGBUS]
SIGFPE[^8.SIGFPE]
SIGKILL[^9.SIGKILL]
SIGUSR1[^10.SIGUSR1]
SIGSEGV[^11.SIGSEGV]
SIGSTOP[^12.SIGSTOP]
[^1.SIGHUP]: SIGHUP:用户终端退出进程时,终端将接收到SIGHUP信号。这个信号的默认操作为终止进程。
[^2.SIGINT]:SIGINT:程序终止信号(interrupt),在用户键入INTR字符(通常Ctrl-C)时发出,用于通知前台进程组终止进程。
[^3.SIGQUIT]:SIGQUIT:和SIGINT类似,但进程收到SIGQUIT会产生core文件,这个意义上类似于一个进程错误信号。
[^4.SIGILL]:SIGILL:执行了非法指令,通常因为可执行文件本身出席错误,或者试图执行数据段,堆栈溢出时也有可能产生这个信号。
[^5.SIGATRAP]:SIGATRAP:由断点指令或其他trap指令产生,由debugger使用。
[^6.SIGABRT]:SIGABRT:调用abort函数生成的信号。
[^7.SIGBUS]:SIGBUS:非法地址,包括内存地址对齐出错。比如访问一个四个字长的整数,但其地址不是4的倍数。
[^8.SIGFPE]:SIGFPE:在发生致命的算术运算错误时发出,不仅包括浮点运算错误,还包括溢出及除数为0等其他所有的算术错误。
[^9.SIGKILL]:SIGKILL:用来立即结束程序的运行,本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可以尝试发送这个信号。
[^10.SIGUSR1]:SIGUSR1、SIGUSR2:留给用户使用。
[^11.SIGSEGV]:SIGSEGV:试图访问未分配给自己的内存,或试图往没有权限的内存地址写数据。
[^12.SIGSTOP]:SIGSTOP:停止(stopped)进程的执行,但该信号可以被处理和忽略,用户键入SUSP字符时(通常Ctrl-Z)发出这个信号。

123.Mach异常通常指底层的内核级异常,以下哪些属于Mach异常?:[多选题]

  • [x] A、EXC_BAD_ACCESS(Bad Memory Access)
  • [x] B、EXC_BAD_INSTRUCTION 运行了非法的指令,往往是运行指令的参数不对(0或nil的参数)
  • [x] C、EXC_RESOURCE 程序资源上线(cpu 占用过高或者内存不足)
  • [x] D、EXC_GUARAD 一些C函数访问错误导致的异常

124.最常见Mach异常:​​EXC_BAD_ACCESS​​,一般是由于那两种情况造成的:[多选题]

  • [x] A、访问非法地址(SIGBUS信号)
  • [ ] B、访问了尚未实现的方法
  • [x] C、访问被回收掉的内存(SIGSEGV信号)
  • [x] D、访问数组时出现了索引越界

125.Objective-C异常并非真正的异常,但是当一个异常被​​抛出到最外层​​还没有被捕获。程序会强行发送那个信号来​​中断程序​​:[单选题]

  • [ ] A、SIGINT
  • [x] B、SIGABRT
  • [ ] C、SIGQUIT
  • [ ] D、SIGSEGV

126.如果管理员发现某个​​进程​​终止不了,可尝试发送那个信号?:[单选题]

  • [ ] A、SIGINT
  • [x] B、SIGABRT
  • [ ] C、SIGKILL
  • [ ] D、SIGSEGV

127.在以下列出的信号中,程序不可​​捕获​​,​​阻塞​​或​​忽略​​的信号有哪两个:[多选题]

  • [ ] A、SIGTSTP
  • [ ] B、SIGPWR
  • [x] C、SIGKILL
  • [x] D、SIGSTOP

128.在以下列出的信号中,默认会导致​​进程退出的信号​​有:[多选题]

  • [x] A、SIGALRM
  • [x] B、SIGHUP
  • [x] C、SIGKILL
  • [x] D、SIGTERM

129.在那个Swift版本中,Apple向开发者提供了两个类 ​​JSONENcoder​​ 和 ​​JSONDecoder​​,使对象和JSON之间进行转换:[单选题]

  • [ ] A、Swift1.0
  • [ ] B、Swift2.0
  • [ ] C、Swift3.0
  • [x] D、Swift4.0

130.Swift中枚举可以有​​初始化方法​​、也可添加​​函数​​[判断题]

  • [x] A、正确
  • [ ] B、错误

131.Swift中的​​结构体​​可以添加​​函数​​、​​扩展​​,和实现​​protocol​​吗[判断题]

  • [x] A、可以
  • [ ] B、不可以

132.Swift中​​字符串、数组和字典​​是以​​结构体​​的形式实现的,还是以​​类​​的形式实现的?[判断题]

  • [ ] A、类
  • [x] B、结构体

133.Swift中的Array、Dictionary、String都是​​结构体​​,传递时会进行拷贝。而不会改变原有的值吗?[判断题]

  • [x] A、是的
  • [ ] B、不是

134.在Swift4中,以下那条语句可以获取​​字符串的长度​​[单选题]

  • [ ] A、"xxx".length
  • [x] B、"xxx".count
  • [ ] C、"xxx".charcters.count
  • [ ] D、"xxx".charcters.length

135.​​单向区间​​主要分两种:确定上限和确定下限的区间。如6...,表示6及之和的所有控件。请问单项区间是由那个Swift版本带来的[单选题]

  • [ ] A、Swift1.0
  • [ ] B、Swift2.0
  • [ ] C、Swift3.0
  • [x] D、Swift4.0

136.使用​​runtime Associate​​ 方法关联的对象,需要在主对象​​dealloc​​的时候释放么?[判断题]

  • [ ] A、需要
  • [x] B、不需要

137.可以向​​编译后​​得到的类中增加实例变量?[判断题]

  • [ ] A、可以
  • [x] B、不可以

138.可以向​​运行时​​创建的类中添加实例变量?[判断题]

  • [x] A、可以
  • [ ] B、不可以

139.以下哪些是常见的​​Carsh​​场景[多选题]

  • [x] A、访问了僵尸对象
  • [x] B、访问野指针
  • [x] C、数组越界
  • [x] D、访问了不存在的方法

140.​​闭包​​是​​值类型​​还是​​引用类型​​的?[判断题]

  • [ ] A、值类型
  • [x] B、引用类型

141.​​weak​​属性需要在​​dealloc​​中置为nil吗?[判断题]

  • [ ] A、需要
  • [x] B、不需要

142.在Objective-C中,向​​nil​​对象发送消息会导致​​crash​​吗?[判断题]

  • [ ] A、会
  • [x] B、不会

存储区说明

存储区说明。

栈[^13.栈]
堆[^14.堆]
全局区[^15.全局区]
文字常量区[^16.文字常量区]
程序代码区[^17.程序代码区]
[^13.栈]: 栈:编译器自动分配和释放,存放函数参数值,局部变量,(swift结构体,栈block)等。
[^14.堆]: 堆:程序员画管理释放。分配方式倒是类似于链表。就是通过new、malloc、realloc分配的内存块,编译器不会负责它们的释放工作,需要用程序区释放。分配方式类似于数据结构中的链表。在iOS开发中所说的“泄漏”说的就是堆区的内存。
[^15.全局区]: 全局区:全局变量和静态变量 。初始化过的全局变量和静态变量在同一块区域,未初始化的全局变量和静态变量存放在一块相邻的区域内。此区域由系统在程序结束后释放。
[^16.文字常量区]: 文字常量区:常量字符串,程序结束后由系统释放
[^17.程序代码区]:程序代码区:存放函数二进制代码。在程序结束后由系统释放。

143.​​runtime​​会将​​weak​​对象放入哪种​​数据结构​​?[单选题]

  • [ ] A、栈
  • [ ] B、队列
  • [ ] C、堆
  • [x] D、hash表

144.​​autoreleasepool​​ 是以一个​​队列数组​​的形式实现的,主要通过以下三个函数完成:[多选题]

  • [x] A、objc_autoreleasepoolPush
  • [x] B、objc_autoreleasepoolPop
  • [ ] C、objc_autoreleasepoolMov
  • [x] D、objc_autorelease

145.Objective-C的​​load​​和​​initlize​​方法只会被​​调用一次​​吗?[判断题]

  • [x] A、是
  • [ ] B、不是

146.调用一个​​类​​的​​静态方法​​,需要​​release​​吗?[判断题]

  • [x] A、需要
  • [ ] B、不需要

147.以下哪些是RunLoop可以做到的:[多选题]

  • [x] A、使程序一直运行接受用户输入
  • [x] B、决定程序在何时应该处理哪些Event
  • [x] C、调用解耦
  • [x] D、节省CPU时间

注脚